package com.hxzy.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hxzy.common.core.domain.entity.SysRole;
import com.hxzy.system.domain.dto.SysRoleSearchDTO;
import com.hxzy.system.domain.dto.ValueExistsDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Set;

/**
 * 角色
 */
@Mapper
public interface SysRoleMapper extends BaseMapper<SysRole> {

    /**
     * 根据角色查询用户角色
     * @param userId
     * @return
     */
    @Select(value = "SELECT\n" +
            " distinct  r.role_key  \n" +
            "FROM\n" +
            "sys_user_role AS sur\n" +
            "INNER JOIN sys_role AS r ON sur.role_id = r.role_id\n" +
            "where r.del_flag='0' and r.`status`='0' and sur.user_id=#{userId}")
    Set<String> selectRolePermissionByUserId(Long userId);

    /**
     * 分页查询
     * @param page
     * @param sysRoleSearchDTO
     * @return
     */
    IPage<SysRole> search(IPage<SysRole> page, @Param(value = "dto") SysRoleSearchDTO sysRoleSearchDTO);

    /**
     * 角色名称是否存在
     * @param valueExistsDTO
     * @return
     */
    int checkRoleNameUnique(ValueExistsDTO valueExistsDTO);

    /**
     * 权限标识是否存在
     * @param valueExistsDTO
     * @return
     */
    int checkRoleKeyUnique(ValueExistsDTO valueExistsDTO);

    /**
     *
     * 根据角色id新增菜单
     * @param roleId
     * @param menuIds
     * @return
     */
    int insertRoleMenu(@Param(value = "roleId") Long roleId, @Param(value = "menuIds") Long[] menuIds);

    /**
     * 根据角色ID查询
     * @param roleId
     * @return
     */
    SysRole selectRoleById(Long roleId);

    /**
     * 根据角色id删除sys_role_menu的值
     * @param roleId
     * @return
     */
    int deleteRoleMenuByRoleId(Long roleId);

    /**
     * 查询所有角色
     *
     * @return 角色列表
     */
    List<SysRole> selectRoleAll();

    /**
     * 获取普通角色列表
     *
     * @return
     */
    List<SysRole> selectNormalRoles();

    int deleteByUserId(Long userId);

    /**
     * 为用户添加角色
     *
     * @param userId
     * @param
     */
    int insertRole(@Param("userId") Long userId, @Param("roleIds") Long[] roleIds);

    /**
     * 根据用户id获取角色列表
     *
     * @param userId
     *
     * @return
     */
    List<SysRole> selectRoleListByUserId(Long userId);

    /**
     *
     * @param sysRoleSearchDTO
     * @return
     */
    List<SysRole> searchExport(SysRoleSearchDTO sysRoleSearchDTO);

    /**
     * 查询sys_user_role是否存在role_id的值
     * @param roleId
     * @return
     */
    int sysUserRoleUsed(Long roleId);

    /**
     * 根据角色id删除sys_user_role的值
     * @param roleId
     * @return
     */
    int deleteUserRoleByRoleId(Long roleId);

    /**
     * 根据角色id删除sys_role_dept的值
     * @param roleId
     * @return
     */
    int deleteRoleDeptByRoleId(Long roleId);
}
